/*
 * Copyright© 2003-2019 浙江汇信科技有限公司, All Rights Reserved.
 */
package com.icinfo.cloud.provider.punish.ucase.casemain.service;

import com.icinfo.cloud.provider.punish.common.documentdataload.dto.CaseDataQueryDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.dto.CaseMainDetailInfoQueryDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.dto.CaseMainDetailInfoSaveDto;
import com.icinfo.cloud.provider.punish.ucase.casemain.model.CaseMainDetailInfo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.*;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseCurrentLinkOperateVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseMainDetailInfoCommonVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseMainDetailInfoVo;
import com.icinfo.cloud.provider.punish.ucase.casemain.vo.CaseRecallLinkVo;
import com.icinfo.cloud.provider.punish.ucase.closearchiving.dto.CaseCloseArchivingDto;
import com.icinfo.cloud.provider.punish.ucase.closearchiving.vo.CaseCloseArchivingEchoVo;
import com.icinfo.cloud.provider.punish.ucase.investigateevidence.dto.CaseAskNoticeDto;
import com.icinfo.cloud.provider.punish.ucase.investigateevidence.dto.CaseAskNoticePersonaDto;
import com.icinfo.cloud.provider.punish.ucase.investigateevidence.vo.AuthBookVo;
import com.icinfo.cloud.provider.punish.ucase.investigateevidence.vo.CasePartyNoticeVo;
import com.icinfo.framework.common.web.Result;
import com.icinfo.framework.core.service.BaseService;

import java.util.List;
import java.util.Map;

/**
 * 描述: 案件详情表（宽表）-TRJ case_main_detail_info 对应的Service接口.<br>
 *
 * @author framework generator
 * @date 2022年02月16日
 */
public interface ICaseMainDetailInfoService extends BaseService {

    /**
     * 【V1.0.0】描述：保存案件主要详情信息
     *
     * @param saveDto {@link CaseMainDetailInfoSaveDto}
     * @return {@link Result<String>} 保存结果
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    Result<String> saveCaseMainDetailInfo(CaseMainDetailInfoSaveDto saveDto);

    /**
     * 【V1.0.0】描述：保存结案归档信息
     *
     * @param  casePunishActionDto
     * @return
     * @author 程亚运
     * @date 2022-02-16 16:02
     */
    Map<String,Object> saveCloseInfo(CaseCloseArchivingDto casePunishActionDto);


    /**
     * 【V1.0.0】描述：结案归档信息 回显
     *
     * @param  caseId
     * @param  docId
     * @return
     * @author 程亚运
     * @date 2022-03-16
     */
    CaseCloseArchivingEchoVo closeArchivingEcho(String caseId, String docId);


    /**
     * 【V1.0.0】描述：获取案件主要详情列表
     *
     * @param queryDto {@link CaseMainDetailInfoQueryDto}
     * @return {@link Result<List<CaseMainDetailInfoVo>} 案件主要详情列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<CaseMainDetailInfoVo> getCaseMainDetailList(CaseMainDetailInfoQueryDto queryDto);

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的立案信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> getCaseIdListShouldReportBasicInfo();

    /**
     * 【V1.2.0】描述：获取案件id列表-需要上报的立案信息
     * @param punishDecideCaseIdList 处罚决定的案件ID列表
     * @return {@link Result <String>} 案件id列表
     * @author mahan
     * @date 2022-10-20 18:52
     */
    List<String> getCaseIdListShouldReportBasicInfo(List<String> punishDecideCaseIdList);

    /**
     * 【V1.1.0】描述：获取立案信息上报成功的所有案件id
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> getReReportBaseCaseIdList();

    /**
     * 【V1.1.0】描述：获取决定信息上报成功的所有案件id
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> getReReportDecisionCaseIdList();

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的执行信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> getCaseIdListShouldReportExecuteInfo();

    /**
     * 【V1.1.0】描述：获取案件id列表-需要上报的结案信息
     *
     * @return {@link List<String>} 案件id列表
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    List<String> getCaseIdListShouldReportCaseOverInfo();

    /**
     * 【V1.0.0】描述：根据唯一标识查询案件主要详情信息
     *
     * @param id 唯一标识
     * @return {@link CaseMainDetailInfoVo} 案件主要详情信息
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    CaseMainDetailInfoVo getCaseMainDetailInfo(String id);

    /**
     * 【V1.0.0】描述：删除案件主要详情信息
     *
     * @param id 主键id
     * @return {@link Result<String>} 删除结果
     * @author xiangyuyu
     * @date 2022-02-16 16:02
     */
    Result<String> removeCaseMainDetail(String id);
    /**
     * 根据案件id获取案件详情数据
     * @author liyafeng
     * @date 2022/2/25
      * @param caseId
     * @return {@link CaseMainDetailInfo}
     */
    CaseMainDetailInfo getCaseMainDetailByCaseId(String caseId);

    /**
     * 询问页面信息接口
     * @author lxj
     * @date  2022/3/2
     * @param  caseId
     * @param  partyId
     * @return CasePartyNoticeVo
     **/
    CasePartyNoticeVo getNoticeMsg(String caseId, String partyId);

    /**
     * 保存询问通知书
     * @author lxj
     * @date  2022/3/3
     * @param caseAskNoticeDto
     * @return boolean
     **/
    Map<String,Object>  saveAskNoticeBook(CaseAskNoticeDto caseAskNoticeDto);

    /**
     * 获取授权委托书页面固定信息
     * @author lxj
     * @date  2022/2/16
     * @param caseId 入参
     * @param partyId 入参
     * @return AuthBookVo
     **/
    AuthBookVo getCaseEntrustBookNeedMsg(String caseId, String partyId);

    /**
     * 根据案件id获取可撤回的列表
     * @author tianrunjia
     * @date  2022/6/24
     * @param caseId 入参
     * @return CaseRecallLinkVo
     **/
    List<CaseRecallLinkVo> getCaseRecallLinkListById(String caseId);

    /**
     * 【V1.4.1】描述：返回案件当前环节的操作按钮-详情页底部，包括流程操作、下一步、更多操作
     * @author tianrunjia
     * @date  2022/8/25
     * @param caseId 入参
     * @return CaseCurrentLinkOperateVo
     **/
    CaseCurrentLinkOperateVo doGetCaseCurrentLinkOperate(String caseId);

    /**
     * 描述：根据案件id查询文书基本信息（通用文书模板加载使用）
     *
     * @param queryDto 查询dto
     * @return {@link CaseMainDetailInfoCommonVo }
     * @author shishengyao
     * @date 2022/12/01
     */
    CaseMainDetailInfoCommonVo getCaseMainDetailInfoCommonVoByCaseId(CaseDataQueryDto queryDto);

    /**
     * 描述: 保存人设条线的询问通知书
     * @author zhanghongqiang
     * @Date 2022/10/26
     * @param caseAskNoticePersonaDto
     * @return com.icinfo.framework.common.web.Result<java.util.Map<java.lang.String,java.lang.Object>>
     */
    Map<String, Object> saveAskNoticeBookPersona(CaseAskNoticePersonaDto caseAskNoticePersonaDto);

    /**
     * 【V1.10.0】描述：获取文书按阶段的列表及每个文书的状态及对应的操作
     *
     * @param caseId 案件id
     * @author tianrunjia
     * @date 2022-12-11
     */
    List<CaseStageDocumentRelationInfoVo> getCaseStageDocumentDetailInfos(String caseId);

    /**
     * 根据案件id获取案件详情数据
     *
     * @param caseId
     * @return {@link CaseMainDetailInfo}
     * @author wangfawei
     * @date 2022/12/6
     */
    CaseMainDetailInfo getCaseMainDetailInfoByCaseId(String caseId);

    /**
     * 转普通程序宽表数据初始化
     * @param caseId
     */
    void dealCaseMainDetailInfoOfChangeWorkFlow(String caseId);
}
